"""
hadoop虚拟机光盘位置    D:\cn_windows_7_ultimate_with_sp1_x86_dvd_u_677486.iso
constraint
作用：表在设计时加入约束，对表中数据的限制条件，为了保证表中记录的完整性和有效性
分类：
    *主键约束PK（primary key）
    *自增长约束（auto_increment）
    非空约束（not null）
    唯一性约束（unique）
    默认约束（default）
    零填充约束（zerofill）
    外键约束FK（foreign key）

TODO 主键约束

1、概念：能唯一标识表中的某一行，方便在RDBMS中尽快找到某一行
       = 唯一约束 + 非空约束
       一个表只允许一个主键，多个列可以用一个联合主键
2、添加单列主键
   create table student(
         age int primary key,
         name varchar(20)
   );
   create table student(
        age int,
        name varchar(20)
        constraint pk1 primary key(age)           pk1:给主键的取名
   );
   查看主键：表 - 右键 - 设计表
   如果插入两条主键列为相同值的数据，或者主键列插入的值为null，会报错(主键列不能重复，且不能为空)
3、添加联合主键
    create table student(
          age int,
          name varchar(20),
          gender varchar(20),
          primary key(age,name)
    );
    联合主键的每一列都不能为空
    alter table student add primary key(age,name);
4、删除主键
   alter table student drop primary key;

TODO 自增长约束

    当主键定义为自增长后，不需要再输入数据，数据库系统根据定义自动赋值
    自增长的约束字段只能是整数型，默认其初始值为1，每增加一条，字段值自动加1
指定字段初始值：
  create table student(
    age int primary key auto_increment,
    name varchar(20),
    gender varchar(20)
  )auto_increment = 100;
   或：
  alter table student auto_increment = 100;
插入数据：
  insert into student(age,name,gender) values(NULL,'张三','男');
删除数据：
   delete from student;  -- 自增长从删除前最后一个值的基础上 + 1
   truncate student;     -- 自增长从头开始

TODO 非空约束

   指定字段不能为空，添加数据时没有指定值，会报错
   name varchar(20) not null,
   或：
   alter table student modify age int not null;

TODO 唯一性约束

  字段的值不能重复出现
    id int unique,
  或：
    alter table student add constraint u1 id unique;
  删除唯一约束：
     alter table student drop index u1;

MySQL中：NULL和包括自己的任何值都不同
    insert into student(id,name) values(NULL,'张三')
    insert into student(id,name) values(NULL,'李四') --- 可以实现

TODO 默认约束

     address varchar(20) default '北京'，
     alter table student modify address varchar(20) default '上海';
     insert into student(id,name) values(1,'张三')；

TODO 零填充约束

      针对数值型字段，自动在数值前填充不足长度的位数
      id int zerofill,
      alter table student modify id int;

TODO 外键约束FK （内容见后面的章节）

      a表中的某一字段，是b表的主键，也就是a表的外键
      用来关联另一个表，确定另一个表记录的字段，保持数据的一致性



TODO 所有约束的综合

create table student(
  主键  age int primary key,
  非空  name varchar(20) not null,
  检查  gender varchar(20) check(gender = '男' or gender = '女'),
  枚举  gender enum('男','女','妖')
  唯一  salary float unique,
  默认  address varchar(20) default '云南'，
  外键  majorId int references major(id)
);


       decimal(5, 2) 定点数，为5位数，小数后2位
"""